﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Data.SqlClient;   

namespace 课程设计.PresentationLayer
{
    public partial class CustomInformation : Form
    {
        public CustomInformation()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;         
        }

        private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                       //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令；
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接；
            sqlCommand.CommandText = "SELECT * FROM tb_Custom;";                                           //指定SQL命令的命令文本；该命令查询所有学生；
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器；
            sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令；
            DataTable customTable = new DataTable();                                                       //声明并实例化数据表，用于保存所有学生，以用作数据网格视图的数据源；
            sqlConnection.Open();                                                                           //打开SQL连接；
            sqlDataAdapter.Fill(customTable);                                                              //SQL数据适配器读取数据，并填充学生数据表；
            sqlConnection.Close();                                                                          //关闭SQL连接；
            this.dgv_Custom.DataSource = customTable;       
        }

        private void btn_Update_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                               //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand insertCommand = new SqlCommand();                                                    //声明并实例化SQL命令；该命令用于插入记录；
            insertCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接；
            insertCommand.CommandText =                                                                     //指定SQL命令的命令文本；
                "INSERT tb_Custom"
                + "(CustomNo,CustomName,Property,Address1,Phone,linkman)"
                + " VALUES(@CustomNo,@CustomName,@Property,@Address1,@Phone,@linkman);";
            insertCommand.Parameters.Add("@CustomNo", SqlDbType.Char, 5, "CustomNo");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度（仅用于定长类型）、所绑定的数据表中的列名；
            insertCommand.Parameters.Add("@CustomName", SqlDbType.VarChar, 0, "CustomName");
            insertCommand.Parameters.Add("@Property", SqlDbType.VarChar, 0, "Property");
            insertCommand.Parameters.Add("@Address1", SqlDbType.VarChar, 0, "Address1");
            insertCommand.Parameters.Add("@Phone", SqlDbType.VarChar, 0, "Phone");
            insertCommand.Parameters.Add("@linkman", SqlDbType.VarChar, 0, "linkman");
            SqlCommand updateCommand = new SqlCommand();                                                    //声明并实例化SQL命令；该命令用于更新记录；
            updateCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接；
            updateCommand.CommandText =                                                                     //指定SQL命令的命令文本；
                "UPDATE tb_Custom"
                + " SET CustomNo=@NewCustomNo,CustomName=@CustomName,Property=@Property,Address1=@Address1,Phone=@Phone,linkman=@linkman"
                + " WHERE CustomNo=@OldCustomNo;";
            updateCommand.Parameters.Add("@NewCustomNo", SqlDbType.Char, 5, "CustomNo");                               //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度（仅用于定长类型）、所绑定的数据表中的列名；
            updateCommand.Parameters.Add("@CustomName", SqlDbType.VarChar, 0, "CustomName");
            updateCommand.Parameters.Add("@Property", SqlDbType.VarChar, 0, "Property");
            updateCommand.Parameters.Add("@Address1", SqlDbType.VarChar, 0, "Address1");
            updateCommand.Parameters.Add("@Phone", SqlDbType.VarChar, 0, "Phone");
            updateCommand.Parameters.Add("@linkman", SqlDbType.VarChar, 0, "linkman");
            updateCommand.Parameters.Add("@OldCustomNo", SqlDbType.Char, 10, "CustomNo");                               //若学号发生更改，则还需提供旧学号，以便查询要更改的行；
            updateCommand.Parameters["@OldCustomNo"].SourceVersion = DataRowVersion.Original;                     //旧学号的来源版本，为数据行版本中的原始值；
            SqlCommand deleteCommand = new SqlCommand();                                                    //声明并实例化SQL命令；该命令用于删除；
            deleteCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接；
            deleteCommand.CommandText =                                                                     //指定SQL命令的命令文本；
                "DELETE tb_Custom"
                + " WHERE CustomNo=@CustomNo;";
            deleteCommand.Parameters.Add("@CustomNo", SqlDbType.Char, 5, "CustomNo");
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器；
            sqlDataAdapter.InsertCommand = insertCommand;                                                   //将SQL数据适配器的属性InsertCommand指向用于插入记录的SQL命令；
            sqlDataAdapter.UpdateCommand = updateCommand;                                                   //将SQL数据适配器的属性UpdateCommand指向用于更新记录的SQL命令；
            sqlDataAdapter.DeleteCommand = deleteCommand;                                                   //将SQL数据适配器的属性DeleteCommand指向用于删除记录的SQL命令；
            DataTable customTable = (DataTable)this.dgv_Custom.DataSource;                                  //声明数据表，并指向数据网格视图的数据源；数据源默认类型为object，还需强制转换类型；
            sqlConnection.Open();                                                                           //打开SQL连接；
            int rowAffected = sqlDataAdapter.Update(customTable);                                          //SQL数据适配器根据学生数据表提交所有更新，并返回受影响行数；
            sqlConnection.Close();                                                                          //关闭SQL连接；
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");        
        }
    }
}
